#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 1e5 + 10, M = 2 * N;
int n, m;
int h[N], e[M], ne[M], idx;
int d[N];
int q[M];
queue<int>ans;
void add(int a, int b)
{
	e[idx] = b;
	ne[idx] = h[a];
	h[a] = idx++;
}
//bool topsort()
//{
//	queue<int>q;
//	for (int i = 1; i <= n; i++) {
//		if (!d[i]) {
//			q.push(i);
//		}
//	}
//	while (q.size()) {
//		int t = q.front();
//		q.pop();
//		ans.push(t);
//		for (int i = h[t]; ~i; i = ne[i]) {
//			int j = e[i];
//			if (--d[j] == 0) {
//				q.push(j);
//			}
//		}
//	}
//	return ans.size() == n;
//}
bool topsort()
{
	int hh = 0, tt = -1;
	for (int i = 1; i <= n; i++) {
		if (!d[i]) {
			q[++tt] = i;
		}
	}
	while (hh <= tt) {
		int t = q[hh++];
		ans.push(t);
		for (int i = h[t]; ~i; i = ne[i]) {
			int j = e[i];
			if (--d[j] == 0) {
				q[++tt] = j;
			}
		}
	}
	return tt == n - 1;
}
int main()
{
	cin >> n >> m;
	memset(h, -1, sizeof(h));
	while (m--) {
		int a, b;
		cin >> a >> b;
		add(a, b);
		d[b]++;
	}
	if (topsort()) {
		while (ans.size()) {
			cout << ans.front() << " ";
			ans.pop();
		}
	}
	else {
		cout << -1 << endl;
	}
	return 0;
}